package MAIN;
//笔试强训第11天
//选择题
/*标识符不能以数字下划线开头，中间不能有特殊符号*/
/*map中的键值对是可以为null的，并且key是唯一的，如果put了两个一样的key，后一个会覆盖掉前一个key*/
/*hashmap是允许键值对的键或者值是null的，它允许任何类型的键和值作为对象*/
/*jdbc编程接口：PreparedStatment是CallableStatment的父类接口，
Statment又是PreparedStatment的接口*/
/*List是接口，接口是用来实现的，不是用来继承的，Set是一个集合类，AbstractSet是继承自于Set的*/
/*WeakHashMap是继承自HashMap的，但是WeakMap不是继承自HashMap的*/
/*ArrayList在调用有参构造的时候，传一个初始容量大小，并没有进行扩容操作，只是开辟了一个初始容量大小的
* 数组，当new一个ArrayList对象调用的是无参构造的时候，是在第一次add的时候才进行扩容，初始内容大小是10，
* 当add第11个元素的时候，以1.5倍的大小进行扩容*/
/*当new一个数组的时候，数组的引用是指向数组第一个元素的首地址*/
/*在方法进行传参的时候，形参会进行临时拷贝，形参引用指向实参，形参的指向发生改变，不会影响实参的改变*/
/*switch语句，在执行case的时候，如果没有break语句，会在执行完某一个case发的时候继续执行下一个case语句
* 如果只执行其中的一个case语句，一定要有break语句*/
/*Java中提供存取数据能力的包是java.sql,java.awt是抽象窗口工具包，java.lang中包含了基础的包装类和
* String类*/

//编程题
import java.util.ArrayList;
import java.util.Scanner;

class TreeNode {
    public TreeNode left;
    public TreeNode right;
    public int value;
}
public class Main11 {
    //两个节点的最近公共祖先（注意：输入的是编号）
    //思路：先找到p和q节点，然后再找的过程中记录下来p和q节点的路径
    //把两个找节点的路径放入到数组中，最后遍历数组，最后一个相等的值就是最近公共祖先
    public int getLCA(int a, int b) {
        // write code here
        return 1;
    }
    public ArrayList<Integer> getPath(TreeNode root,int target) {
        ArrayList<Integer> path = new ArrayList<>();
        TreeNode node = root;
        while (target != node.value) {
            path.add(node.value);
            if (target < node.value) {
                node = node.left;
            }else {
                node = node.right;
            }
        }
        //找到了，最后把val值放进来即可。
        path.add(node.value);
        return path;
    }
    public static void main1(String[] args) {
        //输出一个整数转化成二进制后连续1 的个数
        Scanner scan = new Scanner(System.in);
        while (scan.hasNextInt()) {

        }
    }

    //a和b的公共祖先，如果a和b不相等，父亲节点就是 a/2 ,b/2,最后算出父亲节点相等的时候
    public int getLCA1(int a, int b) {
        // write code here
        while (a != b) {
            if (a > b) {
                a /= 2;
            }else {
                b /= 2;
            }
        }
        return a;
    }
    //求最大的bit数
    //思路：先把这个数转化成二进制的数字，之后 &1，判断当前位是不是1
    //如果是1，count++;如果不是1，count清0
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        while (scan.hasNextInt()) {
            int n = scan.nextInt();
            int count = 0;
            int modCount = 0;
            while (n != 0) {
                if ((n & 1) == 1) {
                    count++;
                    modCount = Math.max(count,modCount);
                }else {
                    count = 0;
                }
                //n左移一位再去进行按位与
                //就是一直让当前位按位与1
                n >>= 1;
            }
            System.out.println(modCount);
        }
    }
}
